package com.mcp_life.module.userbasemodules.controller;

import com.mcp_life.common.context.UserContextHolder;
import com.mcp_life.common.exception.BusinessException;
import com.mcp_life.common.result.Result;
import com.mcp_life.entity.dto.UserAddressDTO;
import com.mcp_life.entity.dto.UserDTO;
import com.mcp_life.entity.pojo.User;
import com.mcp_life.entity.vo.UserVO;
import com.mcp_life.module.userbasemodules.service.AddressService;
import com.mcp_life.module.userbasemodules.service.UserService;
import jakarta.validation.Valid;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private AddressService addressService;
    /**
     * 初始化用户信息
     * @return
     */
    @GetMapping("/userInfo")
    //初始化用户数据，根据id获取当前登录的用户的信息
   public Result<UserVO> userInfo()
    {
        String userId = UserContextHolder.getUserId();
        UserVO userVO = userService.getUserInfo(userId);
        return Result.success();
    }
    /**
     * 用户基础信息修改，不牵扯地址和账户
     * 密码，昵称，性别，头像，
     */
    @PostMapping("/userUpdate")
     public Result userUpdate(@Valid  @RequestBody UserDTO userDTO)
    {
        User user = new User();
        BeanUtils.copyProperties(userDTO, user);
        userService.update(user);
        return Result.success();

    }
    //TODO 用户地址管理，增删改查，设置默认地址，地址类address。

    /**
     * 新增用户地址
     * @param addressDTO
     * @return
     */
     @PostMapping("/addressUpdate")
      public Result addressUpdate(@Valid @RequestBody UserAddressDTO addressDTO){
        if (addressDTO== null){
            throw new BusinessException(601,"参数不能为空");
        }
        addressService.Insert(addressDTO);
        return Result.success();
     }
     /**
      * 修改用户地址
      * @param addressDTO
      * @return
      */


    //TODO 用户的账户管理，personalAccount，增删改查，充值（目前不调用接口，假接口充值），用户账户扣款，用户余额查询。*注意只有实名之后的用户才有个人账户。
    //TODO 后期添加账户流水查验功能。
}
